/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package biblioteca;

import java.util.Calendar;

/**
 *
 * @author Chris
 */
public class Emprestimo {
    private int id;
    private Calendar dataEmprestimo;
    private Calendar dataDevolucao;
    private Usuario usuario;
    private Exemplar[] itens;

    public int getId() {
        return id;
    }

    public void setId() {
        this.id = id++;
    }

    public Calendar getDataEmprestimo() {
        return dataEmprestimo;
    }

    public void setDataEmprestimo() {
        this.dataEmprestimo.set(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, 
                Calendar.HOUR_OF_DAY, Calendar.MINUTE);
    }

    public Calendar getDataDevolucao() {
        return dataDevolucao;
    }

    public void setDataDevolucao() {
        if( usuario instanceof Aluno)
            dataDevolucao.add(dataEmprestimo.DAY_OF_MONTH, +7);
        else
            dataDevolucao.add(dataEmprestimo.DAY_OF_MONTH, +15);
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Exemplar[] getItens() {
        return itens;
    }

    public void setItens(Exemplar[] itens) {
        this.itens = itens;
    }

    @Override
    public String toString() {
        return "Emprestimo{" + "id=" + id + ", dataEmprestimo=" + dataEmprestimo + ", dataDevolucao=" + dataDevolucao + 
                ", usuario=" + usuario + ", itens=" + itens + '}';
    }

    public Emprestimo(int id, Calendar dataEmprestimo, Calendar dataDevolucao, Usuario usuario, Exemplar[] itens) {
        this.id = id;
        this.dataEmprestimo = dataEmprestimo;
        this.dataDevolucao = dataDevolucao;
        this.usuario = usuario;
        this.itens = itens;
    }

    public Emprestimo() {
        
    }
    
    public Emprestimo(Usuario usario, Exemplar itens[]) {
        setId();
        setDataEmprestimo();
        setDataDevolucao();
        this.usuario = usuario;
        this.itens = itens;
    }
    
    public Emprestimo(Usuario usuario){
        setId();
        setDataEmprestimo();
        setDataDevolucao();
        this.usuario = usuario;
        this.itens = new Exemplar[3];
    }
    
    public void gerarTicket(){
        toString();
    }
    
    public static Emprestimo consultarTicket(String CPF, Emprestimo[] emp){
        for(int i = 0; i < emp.length; i++){
            Usuario bao = emp[i].getUsuario();
            if(bao.getCpf().equals(CPF)){
                return emp[i];
            }
        }
        return null;    
    }
    
    public static Emprestimo[] consultarTicket(Emprestimo[] emp, String nomeUsuario){
        Emprestimo[] emprestado = null;
        for(int m = 0, l = 0 ; m < emp.length ; m++ )
            if(emp[m].getUsuario().equals(nomeUsuario)){
                emprestado[l++] = emp[m];
            }
        return emprestado;        
    }//devolvendo tipo da classe para própria classe

    public boolean inserirItem(Exemplar exemplar){
        for(int i = 0; i < itens.length; i++){
            if(itens[i].estaDisponivel(exemplar.getTitulo())){
                exemplar.emprestar();
                return true;
            }
        }
        return false;        
    }
    
    public boolean removerItem(Exemplar exemplar){
        for(int i = 0; i < itens.length; i++){
            if(itens[i].getTitulo().equals(exemplar.getTitulo()))
                itens[i].devolver();
                return true;
        }
        return false;
    }
    
    public static boolean verificarAtraso(Emprestimo[] emp){
        for(int i = 0; i < emp.length; i++){
            if(emp[i].getDataDevolucao().after(Calendar.getInstance())){
                return true;
            }
        }
        return false;        
    }
    
    public static boolean verificarAtraso(Emprestimo emp){
        if(emp.getDataDevolucao().after(Calendar.getInstance())){
            return true;
        }
        return false;
    }
    
    
    
}
